const jwt = require('jsonwebtoken');

const config = {
    secret: process.env.JWT_SECRET || "69AA67D37A71E6F3CD33B34154277",
    accessTokenExpiresIn:'60s',//访问令牌有效期（15s）
    refreshTokenExpiresIn:'7d'//刷新令牌有效期（7天）
}


/**
 * 生成访问令牌（短期，用于访问接口）
 * @param {object} payload 令牌负载 (存储在令牌中的数据，记得不要存储敏感信息)
 * @returns {string} 生成的令牌
 * */
function generateAccessToken(payload) {
    return jwt.sign(payload, config.secret, {
        expiresIn:config.accessTokenExpiresIn
    })
}

/**
 * 生成刷新令牌（长期，用于刷新访问令牌）
 * @param {Object} payload - 通常只包含用户唯一标识
 * @returns {string} 生成的刷新令牌
 * */ 
function generateRefreshToken(payload) {
    return jwt.sign(payload, config.secret, {
        expiresIn:config.refreshTokenExpiresIn
    })
}

/**
 * 验证令牌有效性
 * @param {string} token - 待验证的令牌
 * @returns {Object} 解析后的payload数据
 * @throws {Error} 验证失败时抛出错误（过期、无效等）
 */
async function verifyToken(token) {
    try {
      return jwt.verify(token, config.secret);
    } catch (error) {
      // 分类错误类型
      if (error.name === 'TokenExpiredError') {
        // 令牌过期
        return false;
      } else if (error.name === 'JsonWebTokenError') {
        return false;
      } else {
        return false;
      }
    }
  }

module.exports = {
    generateAccessToken,
    generateRefreshToken,
    verifyToken,
    config
};